#! /usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020-03-27 21:51
# @Author : youngchaolin

print()

'''
以下方法，是作为基础数据类型的补充，练习一遍就行
'''

'''
str
'''

s1='meSSI'
# 首字母大写，其他小写
print(s1.capitalize()) # Messi

# 大小写翻转
print(s1.swapcase())

# 每个单词首字母大写，空格或数字隔开的都生效
msg='messi ronald herry4kaka'
print(msg.title())

# 神奇的center方法
s1='messi'
print(s1.center(11,'*')) # ***messi***

# find index都可以通过元素找索引，前者找不到不会报错（返回-1），后者找不到就报错
s1='messi'
print(s1.find('m')) # 0
print(s1.find('s')) # 2 找到第一个元素就返回
print(s1.find('y')) # -1

print(s1.index('m')) # 0
print(s1.index('s')) # 2
# print(s1.index('y')) # 报错 ValueError: substring not found

'''
tuple
'''

# 元祖中，如果只有一个元素，并且没有逗号，那就不是元祖，而是对应数据类型
t1=(1)
t2=('messi')
t3=([1,2,3])
print(t1,type(t1))
print(t2,type(t2))
print(t3,type(t3))

# 1 <class 'int'>
# messi <class 'str'>
# [1, 2, 3] <class 'list'>

# count计数
t=(1,2,2,2,3,3)
print(t.count(2)) # 3

# index
t=('messi','herry','ronald','messi')
print(t.index('messi')) # 0


'''
list
'''

# sort排序
li=[1,4,5,6463,32334,55]
# 默认升序
li.sort()
print(li)
# 降序
li.sort(reverse=True)
print(li)

# reverse翻转
li=[1,4,5,6463,32334,55]
li.reverse()
print(li)

# [1, 4, 5, 55, 6463, 32334]
# [32334, 6463, 55, 5, 4, 1]
# [55, 32334, 6463, 5, 4, 1]

# 列表可以相加
l1=[1,2,3]
l2=[4,5,6]
print(l1+l2)

# 列表可以相乘
l1=[1,2,3]
print(l1*3)


# 将列表中索引为奇数的元素删除
l1=[1,2,3,4,5,6,7,8,9,10]


# 方式1
# del l1[1::2]
# print(l1)

# 方式2
# l2=[]
# # for index in range(len(l1)):
# #     if index%2==0:l2.append(l1[index])
# # print(l2)

# 方式3 根据索引，倒着删除
for index in range(len(l1)-1,-1,-1):
    if index%2==1:l1.pop(index)
print(l1)
# 注意方式3，倒着删除是没有问题的，因为删除后面的元素，对下一个要比较的元素没有影响，下一个要比较的元素的索引没有变化
# 如果是正向删除，问题就出现了，删除元素，后面元素会往前移动，影响了后面元素的索引，导致删除就乱了，不能删除到想删除的元素

'''
dict
'''

# update方法
t1={'name':'messi','age':33,'salary':8848}
# 增加，有则改，无则增
t1.update({'hobby':'football','age':35})
print(t1) # {'name': 'messi', 'age': 35, 'salary': 8848, 'hobby': 'football'}

t1.update(hobby='basketball')
print(t1) # {'name': 'messi', 'age': 35, 'salary': 8848, 'hobby': 'basketball'}

t1.update([(1,'a'),(2,'b'),(3,'c'),(4,'d')])
print(t1) # {'name': 'messi', 'age': 35, 'salary': 8848, 'hobby': 'basketball', 1: 'a', 2: 'b', 3: 'c', 4: 'd'}

# t1.update(name='clyang')
# print(t1)


# fromkeys
dic=dict.fromkeys('abc',1)
print(dic)

# 有坑来了 ，[]是共用的
dic=dict.fromkeys([1,2,3],[])
dic[1].append(666)
print(dic)

# TODO 删除key中含有'k'这个字母的
dic={'k1':1,'k2':2,'k3':3,'name':'clyang'}
print(dic)

# 不能在循环字典进行读的同时，做删除操作，循环一个字典时，如果改变了字典的大小，就会报错
# 报错 RuntimeError: dictionary changed size during iteration
# for k in dic.keys():
#     if 'k' in k:
#         dic.pop(k,'删除不了')
# print(dic)

# dic.keys()强转为列表再操作
dic={'k1':1,'k2':2,'k3':3,'name':'clyang'}
for k in list(dic.keys()):
    if 'k' in k:
        dic.pop(k)

print(dic) # {'name': 'clyang'}


# 换一种方式，两步走，ok
dic={'k1':1,'k2':2,'k3':3,'name':'clyang'}
keys=[]
for k in dic.keys():
    keys.append(k)
print(keys) # ['k1', 'k2', 'k3', 'name']

for k in keys:
    if 'k' in k:
        dic.pop(k)
print(dic) # {'name': 'clyang'}



dic={'k1':1,'k2':2,'k3':3,'name':'clyang'}
# 这样循环，打印出的结果都是字典的key
for key in dic:
    print(key)


# 以下几种数据类型，都可以转换为bool型的False
print(bool(0))
print(bool(''))
print(bool([]))
print(bool(()))
print(bool({}))
print(bool(set()))
print(bool(None))


